namespace C4F.DevKit.Bluetooth.ObjectExchange
{
    /// <summary>
    /// Specifies the types of error and/or exception that occurred during
    /// ObjectExchange.
    /// </summary>
    public enum ObjectExchangeErrorType
    {
        /// <summary>
        /// The operation was aborted by the user or the Object Exchange 
        /// Service.
        /// </summary>
        Aborted,

        /// <summary>
        /// The user is trying to connect to an Object Exchange Service to
        /// which he is already connected to.
        /// </summary>
        AlreadyConnected,

        /// <summary>
        /// The user is trying to copy a file that is already being copied.
        /// </summary>
        AlreadyCopying,

        /// <summary>
        /// The Object Exchange Service cannot understand the requested command.
        /// </summary>
        BadRequest,

        /// <summary>
        /// Connection to the Object Exchange Service cannot be established.
        /// </summary>
        UnableToConnect,

        /// <summary>
        /// Disconnection from the Object Exchange Service cannot be 
        /// established.
        /// </summary>
        DisconnectFailed,

        /// <summary>
        /// The Object Exchange Service understands the command but does not
        /// allow it. 
        /// </summary>
        Forbidden,

        /// <summary>
        /// The Object Exchange Service does not allow non-empty folders to be
        /// deleted.
        /// </summary>
        DeleteDirectoryFailed,

        /// <summary>
        /// The Object Exchange Service can not execute the requested operation.
        /// </summary>
        InternalServerError,

        /// <summary>
        /// The Object Exchange Service did not accept the request.
        /// </summary>
        NotAcceptable,

        /// <summary>
        /// An operation is being performed without a connection to the Object
        /// Exchange Service.
        /// </summary>
        NoConnection,

        /// <summary>
        /// The object targetted by the operation is not found on the remote
        /// device by the Object Exchange Service.
        /// </summary>
        NotFound,

        /// <summary>
        /// The Create Folder operation is denied by the Object Exchange Service.
        /// </summary>
        CreateFolderDenied,

        /// <summary>
        /// The Push operation is denied by the Object Exchange Service. 
        /// </summary>
        SendDenied,

        /// <summary>
        /// The operation requested is not implemented by the Object Exchange
        /// Service. 
        /// </summary>
        NotImplemented,

        /// <summary>
        /// The Object Exchange Service is not available on the remote device.
        /// </summary>
        ServiceUnavailable,

        /// <summary>
        /// A system error occurred.
        /// </summary>
        SystemError,

        /// <summary>
        /// Error is raised due to a failure to read/write from the stream to
        /// the Object Exchange Service. 
        /// </summary>
        StreamError,

        /// <summary>
        /// The request to an Object Exchange Service timed out.
        /// </summary>
        Timeout,

        /// <summary>
        /// The remote device does not allow storage of the specified media type.
        /// </summary>
        UnsupportedMediaType,

        /// <summary>
        /// The Object Exchange Service could not complete the request due to a
        /// conflict with the current state of the resource.
        /// </summary>
        Conflict,

        /// <summary>
        /// The Object Exchange Service requires the user to provide additional
        /// information related to security.
        /// </summary>
        SecurityError,

        /// <summary>
        /// The Object Exchange Service requires the user to provide additional
        /// information related to the request.
        /// </summary>
        AdditionalInfoRequired,
        
        /// <summary>
        /// The resource requested has been moved on the server. 
        /// </summary>
        ResourceMoved,

        /// <summary>
        /// The Object Exchange Service does not allow the requested method.
        /// </summary>
        MethodNotAllowed,

        /// <summary>
        /// The resource has not been modified since the last request, and the
        /// locally cached copy should be used instead. 
        /// </summary>
        NotModified,

        /// <summary>
        /// The Object Exchange Service is refusing to process a request because
        /// the request entity is larger than the server is willing or able to 
        /// process.
        /// </summary>
        RequestedEntityTooLarge,

        /// <summary>
        /// The Object Exchange Service is refusing to service the request 
        /// because the requested URL is too long.
        /// </summary>
        RequestUrlTooLarge,

        /// <summary>
        /// The server is a gateway or a proxy and an error occurred while
        /// processing the request.
        /// </summary>
        GatewayError,

        /// <summary>
        /// The Object Exchange Service responded with a database error.
        /// </summary>
        DatabaseError,

        /// <summary>
        /// The Object Exchange Service responded with an unrecognized code.
        /// </summary>
        UnknownObjectExchangeError
    }
}